package main

import (
	"fmt"
	"time"

	"github.com/valyala/fasthttp"
)

// 方式一：使用 fasthttp.Client 发送GET请求, 不带参数
// func main() {
// 	client := &fasthttp.Client{
// 		MaxConnsPerHost: 100,
// 		ReadTimeout:     10 * time.Second,
// 		WriteTimeout:    10 * time.Second,
// 	}	

// 	req := fasthttp.AcquireRequest()
// 	defer fasthttp.ReleaseRequest(req)
// 	req.SetRequestURI("http://localhost:8080/ping")
// 	req.Header.SetMethod("GET")

// 	resp := fasthttp.AcquireResponse()
// 	defer fasthttp.ReleaseResponse(resp)

// 	if err := client.Do(req, resp); err != nil {
// 		fmt.Println(err)
// 		return
// 	}

// 	fmt.Println(resp.StatusCode())
// 	fmt.Println(resp.Header.String())
// 	fmt.Println(string(resp.Body()))	
// }

// 方式二：使用 fasthttp.Client 发送GET请求, 带querystring参数
// func main()  {
// 	client := &fasthttp.Client{
// 		MaxConnsPerHost: 100,
// 		ReadTimeout:     10 * time.Second,	
// 		WriteTimeout:    10 * time.Second,
// 	}	

// 	req := fasthttp.AcquireRequest()
// 	defer fasthttp.ReleaseRequest(req)
// 	req.SetRequestURI("http://localhost:8080/query?name=lzy&age=25")
// 	req.Header.SetMethod("GET")

// 	resp := fasthttp.AcquireResponse()
// 	defer fasthttp.ReleaseResponse(resp)

// 	if err := client.Do(req, resp); err != nil {
// 		fmt.Println(err)
// 		return
// 	}

// 	fmt.Println(resp.StatusCode())
// 	fmt.Println(resp.Header.String())
// 	fmt.Println(string(resp.Body()))	
// }

// 方式三：使用 fasthttp.Client 发送GET请求, 带路径参数
// func main()  {
// 	client := &fasthttp.Client{
// 		MaxConnsPerHost: 100,
// 		ReadTimeout:     10 * time.Second,	
// 		WriteTimeout:    10 * time.Second,
// 	}	

// 	req := fasthttp.AcquireRequest()
// 	defer fasthttp.ReleaseRequest(req)
// 	req.SetRequestURI("http://localhost:8080/user/lisi")
// 	req.Header.SetMethod("GET")

// 	resp := fasthttp.AcquireResponse()
// 	defer fasthttp.ReleaseResponse(resp)

// 	if err := client.Do(req, resp); err != nil {
// 		fmt.Println(err)
// 		return
// 	}

// 	fmt.Println(resp.StatusCode())
// 	fmt.Println(resp.Header.String())
// 	fmt.Println(string(resp.Body()))	
// }


// 方式四：使用 fasthttp.Client 发送POST请求, 不带参数
func main()  {
	client := &fasthttp.Client{
		MaxConnsPerHost: 100,
		ReadTimeout:     10 * time.Second,	
		WriteTimeout:    10 * time.Second,
	}	

	req := fasthttp.AcquireRequest()
	defer fasthttp.ReleaseRequest(req)
	req.SetRequestURI("http://localhost:8080/json")
	req.Header.SetMethod("POST")
	req.Header.SetContentType("application/json")
	// req.SetBody([]byte(`{"name": "lisi", "age": "25"}`))

	resp := fasthttp.AcquireResponse()

	defer fasthttp.ReleaseResponse(resp)	
	if err := client.Do(req, resp); err != nil {
		fmt.Println(err)
		return
	}

	fmt.Println(resp.StatusCode())
	fmt.Println(resp.Header.String())
	fmt.Println(string(resp.Body()))	
}


// 方式五：使用 fasthttp.Client 发送POST请求, 带参数
// func main()  {
// 	client := &fasthttp.Client{
// 		MaxConnsPerHost: 100,
// 		ReadTimeout:     10 * time.Second,	
// 		WriteTimeout:    10 * time.Second,
// 	}	

// 	req := fasthttp.AcquireRequest()
// 	defer fasthttp.ReleaseRequest(req)
// 	req.SetRequestURI("http://localhost:8080/json")
// 	req.Header.SetMethod("POST")
// 	req.Header.SetContentType("application/json")
// 	req.SetBody([]byte(`{"name": "lisi", "age": "25"}`))

// 	resp := fasthttp.AcquireResponse()

// 	defer fasthttp.ReleaseResponse(resp)	
// 	if err := client.Do(req, resp); err != nil {
// 		fmt.Println(err)
// 		return
// 	}

// 	fmt.Println(resp.StatusCode())
// 	fmt.Println(resp.Header.String())
// 	fmt.Println(string(resp.Body()))	
// }